package com.icecola.d8_thread_pool;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/*
 Executors 工具类
 大型并发系统使用可能有风险，弊端如下：
 1.FixedThreadPool和SingleThreadPool
    允许的请求队列长度为Integer.MAX_VALUE,可能会堆积大量的请求，从而导致OOM
 2.CachedThreadPool和ScheduledThreadPool
    允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程，从而导致OOM
 建议用ThreadPoolExecutor，自己创建自己控制
 */

public class ThreadPoolTest3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建输入数量的线程池对象
        // 最大数量建议为逻辑处理器数量+1
        ExecutorService pool = Executors.newFixedThreadPool(25);
        //创建一个线程的线程池对象
        // ExecutorService pool = Executors.newSingleThreadExecutor();
        // 2.使用线程处理Callable任务
        for (int i = 1; i <= 25; i++) {
            Future<String> f = pool.submit(new MyCallable(i * 100));
            System.out.println(f.get());
        }
    }
}
